package genotype;

import java.util.Collection;

import evolutionaryLoop.EvolutionaryParameters;
import evolutionaryProblems.Phenotype;

public abstract class Genotype {
	
//	public abstract Genotype clone(); 
//	public abstract Genotype mutate(double mutateRate); 
////	public abstract <T extends Genotype> Collection<T> crossover(T genotype, double crossoverRate);
//	public abstract <T extends Genotype> Collection<T> crossover(T genotype, int crossoverPoints); 
//	public abstract <T extends Genotype> Collection<T> crossover(T genotype); 
//	public abstract Phenotype getPhenotype(); 
	
	protected EvolutionaryParameters parameters;
	
	public Genotype(EvolutionaryParameters parameters){
		this.parameters = parameters; 
	}
	
	public EvolutionaryParameters getParameters() {
		return parameters;
	}
	
	public abstract Genotype clone(); 
	public abstract Genotype mutate(); 
//	public abstract <T extends Genotype> Collection<T> crossover(T genotype, double crossoverRate);
	public abstract Collection<Genotype> crossover(Genotype genotype, int crossoverPoints); 
	public abstract Collection<Genotype> crossover(Genotype genotype); 
	public abstract Phenotype evolveGenotype(); 

}
